Add active launch indicator to launch history menu#2652
Add active launch indicator to launch history menu#2652SougandhS wants to merge 1 commit intoeclipse-platform:masterfrom
Conversation
|
Since recently the "circle" was added to indicate changed file, I would not use this for running launch config, it would be confusing. What about simple "(running)" label? |
How about \u2699 ( ⚙ "gear" ) or \u1F3C3 ( 🏃 "running man" ) ? |
|
The change is simple and nice, do we really need an option for that? If yes, please enable by default. |
| ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches(); | ||
| IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); | ||
| boolean launchPref = store.getBoolean(IInternalDebugUIConstants.PREF_LAUNCHED_INDICATOR); | ||
| for (ILaunchConfiguration launch : favoriteList) { |
There was a problem hiding this comment.
Can you please guard the new code, including fetching of the launch configs by first check if launchPref is set? Same below.
There was a problem hiding this comment.
Added a length check for launches
There was a problem hiding this comment.
This check is not needed, the checkIfLaunched() will not do much if it is empty, same below
|
If unicode symbol is to be used - extra testing is needed that the chosen one is widely available in default fonts as per (https://eclipse.dev/eclipse/development/plans/eclipse_project_plan_4_40.xml#target_environments) and ideally in some popular fonts(whatever they are) and last but not least verify on all platform that nothing bad happens when a font that doesn't contain the symbol is used. |
Please no option for such things. We already have more options than one can find and manage. |
18c45c7 to
e2949db
Compare
Removed all the preference parts 👍 |
Thanks, I'll try to check in these platforms.. |
See also https://stackoverflow.com/questions/48468088/unicode-character-uncompatibility At least on RHEL 9.6 with "Sans Serif" dialog font (whatever system means with that name) it looks OK. |
|
Hi @iloveeclipse, @akurtakov, how about adding overlay image ? |
Why not, but then maybe the one with the green "Run" arrow like on the Progress view icon? |
|
I have a preference to (widely spread) unicode symbol as (at least on Linux) these autoadjust contrast on changes of Gtk theme. Also they are less resource hungry and auto managed by OS instead of images that have to be destroyed and etc. |
|
So let's try with \u2699 ( ⚙ "gear" ) and push it to M3 so hopefully more people could test it. If someone complains, we can switch it off for RC. |
So include a preference option ? |
|
no, just merge & check for bug reports. worst case is some rectangle shown instead I assume. |
Adds a visual indicator to launch configurations that are currently active in the launch history menu.
| */ | ||
| private boolean checkIfLaunched(ILaunchConfiguration launchConfiguration, ILaunch[] launches) { | ||
| for (ILaunch launch : launches) { | ||
| if (launch.getLaunchConfiguration().equals(launchConfiguration) && !launch.isTerminated()) { |
There was a problem hiding this comment.
launch.getLaunchConfiguration() can be null
| for (ILaunchConfiguration launch : historyList) { | ||
| LaunchAction action= new LaunchAction(launch, getMode()); | ||
| if (launches.length > 0 && checkIfLaunched(launch, launches)) { | ||
| action.setText(action.getText() + " \u2699"); //$NON-NLS-1$ |
There was a problem hiding this comment.
Are two spaces between text and new character intended?
There was a problem hiding this comment.
Yes two spaces are required. else it wont look good
| ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches(); | ||
| IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); | ||
| boolean launchPref = store.getBoolean(IInternalDebugUIConstants.PREF_LAUNCHED_INDICATOR); | ||
| for (ILaunchConfiguration launch : favoriteList) { |
There was a problem hiding this comment.
This check is not needed, the checkIfLaunched() will not do much if it is empty, same below
There was a problem hiding this comment.
Pull request overview
Adds UI decoration to the launch history (favorites + history) drop-down menu so that entries corresponding to a currently active (non-terminated) launch are visually marked, helping users avoid relaunching already-running configurations.
Changes:
- Fetches current launches from the launch manager when building the launch history menu.
- Decorates matching launch history/favorite entries by appending a Unicode indicator.
- Introduces a helper method to detect whether a configuration has an associated non-terminated launch.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| */ | ||
| private boolean checkIfLaunched(ILaunchConfiguration launchConfiguration, ILaunch[] launches) { | ||
| for (ILaunch launch : launches) { | ||
| if (launch.getLaunchConfiguration().equals(launchConfiguration) && !launch.isTerminated()) { |
| ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches(); | ||
| for (ILaunchConfiguration launch : favoriteList) { | ||
| LaunchAction action= new LaunchAction(launch, getMode()); | ||
| if (launches.length > 0 && checkIfLaunched(launch, launches)) { | ||
| action.setText(action.getText() + " \u2699"); //$NON-NLS-1$ | ||
| } | ||
| addToMenu(menu, action, accelerator); | ||
| accelerator++; | ||
| } | ||
|
|
||
| // Separator between favorites and history | ||
| if (favoriteList.length > 0 && historyList.length > 0) { | ||
| addSeparator(menu); | ||
| } | ||
|
|
||
| // Add history launches next | ||
| for (ILaunchConfiguration launch : historyList) { | ||
| LaunchAction action= new LaunchAction(launch, getMode()); | ||
| if (launches.length > 0 && checkIfLaunched(launch, launches)) { | ||
| action.setText(action.getText() + " \u2699"); //$NON-NLS-1$ | ||
| } |
| /** | ||
| * Returns whether the given launch configuration has been launched. | ||
| * | ||
| * @param launchConfiguration the launch configuration | ||
| * @param launches the current active launches | ||
| * @return {@code true} if a matching launch exists, {@code false} otherwise | ||
| */ | ||
| private boolean checkIfLaunched(ILaunchConfiguration launchConfiguration, ILaunch[] launches) { | ||
| for (ILaunch launch : launches) { | ||
| if (launch.getLaunchConfiguration().equals(launchConfiguration) && !launch.isTerminated()) { | ||
| return true; | ||
| } | ||
| } | ||
| return false; |
| protected void fillMenu(Menu menu) { | ||
| ILaunchConfiguration[] historyList= getHistory(); | ||
| ILaunchConfiguration[] favoriteList = getFavorites(); | ||
|
|
||
| // Add favorites | ||
| int accelerator = 1; | ||
| ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches(); | ||
| for (ILaunchConfiguration launch : favoriteList) { | ||
| LaunchAction action= new LaunchAction(launch, getMode()); | ||
| if (launches.length > 0 && checkIfLaunched(launch, launches)) { | ||
| action.setText(action.getText() + " \u2699"); //$NON-NLS-1$ | ||
| } | ||
| addToMenu(menu, action, accelerator); | ||
| accelerator++; | ||
| } | ||
|
|
||
| // Separator between favorites and history | ||
| if (favoriteList.length > 0 && historyList.length > 0) { | ||
| addSeparator(menu); | ||
| } | ||
|
|
||
| // Add history launches next | ||
| for (ILaunchConfiguration launch : historyList) { | ||
| LaunchAction action= new LaunchAction(launch, getMode()); | ||
| if (launches.length > 0 && checkIfLaunched(launch, launches)) { | ||
| action.setText(action.getText() + " \u2699"); //$NON-NLS-1$ | ||
| } | ||
| addToMenu(menu, action, accelerator); | ||
| accelerator++; | ||
| } |





Adds support to show an active launch indicator in the launch history menu, helping users quickly identify which launch configurations are currently running from launch history. Entries with associated non-terminated launches are marked with a visual indicator "●" ,Once the indicator is shown, users can immediately recognize that the configuration is already running, helping avoid unnecessary or unintended clicks from the launch history menu. The feature is controlled by the preference
and is applied only when enabled, ensuring no change to existing behavior by default.
With Active (Running)


With In-Active (Terminated or not launched)